package br.unirio.octopus.dominio;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

@Entity
@Table(name = "grupoUsuarios")
public class GrupoUsuarios implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 662026616120306400L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "ID", unique = true, nullable = false)
	private int idDoGrupo;

	@Column(name = "nome", nullable = false, unique=true, length = 255)
	private String nome;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "IDAdministrador")
	private Usuario usuario;

	@ManyToMany(fetch = FetchType.LAZY, mappedBy="gruposDoUsuario")	
	private Set<Usuario> membrosDoGrupo;     

	// Construtores

	public GrupoUsuarios(String nomeDoGrupo, Usuario usuario) {
		super();
		this.nome = nomeDoGrupo;
		this.usuario = usuario;
		this.membrosDoGrupo = new HashSet<Usuario>();
	}
	
	
	public GrupoUsuarios() {
		super();
		this.membrosDoGrupo = new HashSet<Usuario>();
	}

	/* **********************************
	 * Gets/Sets
	 * 
	 * **********************************
	 */

	public int getIdDoGrupo() {
		return idDoGrupo;
	}

	public void setIdDoGrupo(int idDoGrupo) {
		this.idDoGrupo = idDoGrupo;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}


	public Set<Usuario> getMembrosDoGrupo() {
		return membrosDoGrupo;
	}


	public void setMembrosDoGrupo(Set<Usuario> membrosDoGrupo) {
		this.membrosDoGrupo = membrosDoGrupo;
	}

}
